package controler;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import listen.EinstListe;
import model.VerwEinstellungen;
import datenbank.befehle;
import datenbank.verbinden;

public class ContEinstellungen implements Serializable {

	private VerwEinstellungen verwEinstellungen;

	private String db = "C:/Datenbank/bachmann/";
	private String benutzer = "kaiser";
	private String passwort = "8459191";

	private Connection conn;

	private String pfadDateiSer = "C:/Datenbank/einstellungen.ser";

	/**
	 * Konstruktor
	 */
	public ContEinstellungen(VerwEinstellungen verwEinstellungen) {
		this.verwEinstellungen = verwEinstellungen;

		File f = new File(pfadDateiSer);

		// Datenbank initialisieren
		try {
			Class.forName("org.hsqldb.jdbcDriver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		try {
			conn = verbinden.conect(db, benutzer, passwort);
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		try {
			befehle.schreibenAllg(
					conn,
					"CREATE TABLE einstellungen (ID INTEGER IDENTITY, doub_fehler REAL, int_korrektur INTEGER )");

			System.out.println("Tabellen einstellungen erstellt");

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			// e.printStackTrace();
		}
	

		// Datei laden wenn existiert
		if (f.exists()) {
			try {
				ladenSeriell();

				System.out.println("Daten geladen");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
//		ladenDB();

	}

	/**
	 * 
	 */
	public void addToleranzen() {
		EinstListe liste = new EinstListe(0, 0);

		verwEinstellungen.addEinstellungen(liste);

	}

	/**
	 * Speichert die Liste
	 * 
	 * @throws IOException
	 */
	public void save() {

		File f = new File(pfadDateiSer);

		// Falls Datei nicht existiert erstellen
		if (!f.exists()) {
			try {
				f.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		try {
			saveSeriell();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		System.out.println("Daten gespeichert");

	}

	/**
	 * Speichert die Komplette Liste Serialisiert
	 * 
	 * @throws IOException
	 */
	private void saveSeriell() throws IOException {

		OutputStream fos;
		ObjectOutputStream o;

		// Auftrag sichern
		fos = new FileOutputStream(pfadDateiSer);

		o = new ObjectOutputStream(fos);

		// Liste serialisieren
		o.writeObject(verwEinstellungen.getEinstellungen());
		// o.writeObject(zeit);

		o.close();
	}

	/**
	 * @throws IOException
	 * @throws ClassNotFoundException
	 * 
	 */
	private void ladenSeriell() throws IOException, ClassNotFoundException {

		InputStream fis;
		ObjectInputStream o;

		List<EinstListe> liste = new ArrayList<EinstListe>();

		fis = new FileInputStream(pfadDateiSer);

		o = new ObjectInputStream(fis);

		liste.addAll((List<EinstListe>) o.readObject());

		// Liste speichern
		verwEinstellungen.setEinstellungen(liste);
		
		

	}
	
	/**
	 * @throws IOException
	 * @throws ClassNotFoundException
	 * 
	 */
	private void ladenDB(){
		EinstListe einstListe = new EinstListe();
		
		List<EinstListe> liste = new ArrayList<EinstListe>();
	


		// Liste speichern
		verwEinstellungen.setEinstellungen(liste);

	}
}
